define([
    'text!planmanage/addfileplan/templates/StrategyTree.html',
    'planmanage/addfileplan/views/AddFilePlan',
    'planmanage/addfileplan/views/AddFilePlan_variable'
], function(StrategyTreeViewTpl, AddFilePlanView, VariableView) {
    var treeObj;// 策略树对象
    return fish.View.extend({
        template: fish.compile(StrategyTreeViewTpl),
        i18nData: fish.extend({}),
        events: {},

        initialize: function() {
            // 策略树的数据回绑
            fish.on('setStrategyTree', $.proxy(this.setStrategyTree, this));
            // 获取策略信息
            fish.on('getStrategyInfo', $.proxy(this.getStrategyInfo, this));
        },

        serialize: function() {
            return this.i18nData;
        },

        //这里用来初始化页面上要用到的fish组件
        afterRender: function() {
            var me = this;
            // 策略树 相关
            function zTreeBeforeDrag(treeId, treeNodes) {
                return false;
            };
            setting = function setting(dmPlanId){
                var url = webRoot + 'jsonData/addFilePlanStrategyTree.json';
                if(dmPlanId != 0){
                    url = webRoot + 'baseconfig/dmstrategy/queryRecordList.do?dmPlanId=' + dmPlanId;
                }
                var setting = {
                    async: {
                        enable: true,
                        contentType: "application/json",
                        url: url,
                        type: 'post'
                    },
                    view: {
                        dblClickExpand:false,
                        selectedMulti: false,
                        showIcon: false,
                        addDiyDom:addDiyDom
                    },
                    edit: {
                        drag:{
                            isCopy:false,
                            autoOpenTime:100
                        },
                        enable: true
                    },
                    data: {
                        keep:{
                            leaf:true,
                            parent:true
                        },
                        simpleData: {
                            enable: true,
                            idKey: "id",
                            pIdKey: "pId",
                            rootPId: 0
                        }
                    },
                    callback: {
                        beforeDrag: beforeDrag,
                        beforeDrop: beforeDrop,
                        beforeAsync: beforeAsync,
                        beforeRemove: beforeRemove,
                        onClick: onClick,
                        onNodeCreated: zTreeOnNodeCreated
                    }
                };
                return setting;
            }
            $.fn.zTree.init($("#tree"), setting(0));
            treeObj = $.fn.zTree.getZTreeObj("tree");
            var newCount = 1, expandAll=true;

            // 用于捕获节点生成 DOM 后的事件回调函数
            function zTreeOnNodeCreated(event, treeId, treeNode){
                
            }

            // 拖动之前
            function beforeDrag(treeId, treeNodes) {
                for (var i=0; i<treeNodes.length; i++) {
                    // 禁止根节点拖拽
                    if (treeNodes[i].drag === false) {
                        return false;
                    }
                }
                return true;
            }

            // 放下之前
            // treeNodes：移动的策略；targetNode：目标策略；moveType：prev-移动到目标前面，next-移动到目标后面
            // inner:移动到策略组
            function beforeDrop(treeId, treeNodes, targetNode, moveType) {
                //禁止成为根节点
                if(targetNode == null || (moveType != "inner" && !targetNode.parentTId)){
                    return false;
                }else{
                    $.blockUI({message : "数据载入中,请稍候..."});
                    $.ajax({
                        url : webRoot + 'baseconfig/dmstrategy/drag.do',
                        type : 'POST',
                        async : true,
                        data : {moveId: treeNodes[0].id, targetId: targetNode.id, moveType: moveType}
                    }).done(function(serverData, textStatus, jqXHR) {
                        $.fn.zTree.init($("#tree"), setting(dmPlanId));
                    }).fail(function() {
                        fish.toast('error', '网络连接失败！');
                    }).always(function() {
                        $.unblockUI();
                    });
                }
            }

            function beforeAsync(treeId, treeNode){
                if(treeNode && !treeNode.parentTId) return false;
            }

            // 添加策略 按钮事件
            function addDiyDom(treeId, treeNode) {
                var aObj = $("#" + treeNode.tId + "_a");
                if(treeNode.isParent){
                    var AddBtnStr = '<button id="addLeafNode_'+treeNode.id+'" class="addLeafNode pull-right">添加策略</button>';
                    aObj.after(AddBtnStr);
                    var btn = $("#addLeafNode_"+treeNode.id);
                    if (btn) btn.bind("click", function(){
                        fish.toast('info', '目前文件计划只支持单策略组单策略，填写策略名称并点击进入策略配置');
                        // fish.trigger('addStrategy');
                    });
                }
                if(treeNode.threads) {
                    aObj.append('<span style="color:#999">(并发数：'+treeNode.threads+')</span>');
                }
            };
            
            // 策略 按钮事件
            function onClick(eventjs, treeIdString, treeNodeJSON, clickFlag){
                if(treeNodeJSON.isParent){
                    return;
                }
                // if(treeNodeJSON.name == "策略1"){
                //     fish.toast('info', '请先修改策略名称');
                //     return;
                // }
                
                // 验证策略名称是否重复
                fish.ajax({
                    async : false,
                    url: ctx + '/baseconfig/dmfileplan/strategyNameIsRepeated.do',
                    showMask: false,  //是否自动显式全局遮罩
                    showError: true, //在出现异常时自动显示异常信息，后台需要返回的数据格式：{code:'ERROR-1001',message:'登录失败'}
                    timeout: 30000,   //超过3秒显式全局遮罩，此参数在showMask为true时才有效
                    data: {strategyName: treeNodeJSON.name, dmStrategyId: treeNodeJSON.id},
                    beforeSend: function(){
                        $.blockUI({message : "判断策略名称是否重复：数据提交中,请稍候..."});
                    },
                    complete: function(xhr, status){
                        $.unblockUI();
                        if(status == 'timeout'){
                            fish.toast('error', "网络请求超时");
                            return;
                        }
                        if(xhr.responseJSON){// 策略名称重复，不能继续下一步
                            fish.toast('warn','策略名称重复，请重新输入');
                            VariableView.setStrategyNameIsRepeated(true);
                            VariableView.setPlanForm_OK(false);
                            return;
                        }
                        VariableView.setStrategyNameIsRepeated(false);
                    },
                    //【注意】如果你在这里配置了自己的error处理函数，fish.ajax就不会自动帮你显示异常信息了！
                    error:function(){
                        $.unblockUI();
                    }
                });
                // 设置策略ID
                VariableView.setDmStrategyId(treeNodeJSON.id);
                // 设置策略组
                VariableView.setGroupNbr(treeNodeJSON.pId);
                // 获取计划表单数据
                // 将策略名称传过去
                fish.trigger('oneStrategy', treeNodeJSON.name);
            };
            
            // 删除策略 按钮事件
            function beforeRemove(treeId, treeNode){
                return false;
                fish.confirm("这将会直接删除策略，确定删除?").result.then(function(){
                    if(treeNode.isParent){// 删除整个策略组
                        $.blockUI({message : "数据载入中,请稍候..."});
                        $.ajax({
                            url : webRoot + 'baseconfig/dmstrategy/deleteGroup.do',
                            type : 'POST',
                            async : true,
                            data : {dmStrategyId: treeNode.id, dmPlanId: dmPlanId}
                        }).done(function(serverData, textStatus, jqXHR) {
                            $.fn.zTree.init($("#tree"), setting(dmPlanId));
                        }).fail(function() {
                            fish.toast('error', '网络连接失败！');
                        }).always(function() {
                            $.unblockUI();
                        });
                    }else{
                        $.blockUI({message : "数据载入中,请稍候..."});
                        $.ajax({
                            url : webRoot + 'baseconfig/dmstrategy/delete.do',
                            type : 'POST',
                            async : true,
                            data : {dmStrategyId: treeNode.id, dmPlanId: dmPlanId}
                        }).done(function(serverData, textStatus, jqXHR) {
                            $.fn.zTree.init($("#tree"), setting(dmPlanId));
                        }).fail(function() {
                            fish.toast('error', '网络连接失败！');
                        }).always(function() {
                            $.unblockUI();
                        });
                    }
                });
            };
            
            // 添加策略组 按钮事件
            $("#addParentNode").click(function() {
                fish.toast('info', '目前文件计划只支持单策略组单策略');
                // $('#planForm').validator({
                //     timely:0,
                //     ignore:':hidden'//任何不可见的元素，都不作验证
                // });
                // 验证输入值的正确性
                // if ($("#planForm").isValid()) {
                    // 表单数据-计划信息
                    // treeObj.addNodes(null, {id: 1, pId: 0, name: "策略组1", open: true, drag: false, isParent: true}, false);
                    // treeObj.addNodes(null,{id: serverData.groupNbr, pId:0, name: serverData.groupName, open:true, drag:false,isParent:true},false);
                // }else{
                //     setTimeout(function(){$('#planForm').validator('cleanUp')},3000);
                // }
            });

            // 展开收缩策略
            $('#expandAllNode').bind('click',function(){
                if(expandAll){
                     treeObj.expandAll(false);
                    $(this).html('展开全部');
                    return expandAll=false;
                }else{
                     treeObj.expandAll(true);
                    $(this).html('收起全部');
                    return expandAll=true;
                }
            })
        },

        setStrategyTree: function(dmPlanId){
            $.fn.zTree.init($("#tree"), setting(dmPlanId));
        },

        // 获取策略信息
        getStrategyInfo: function(){
            var me = this;
            fish.ajax({
                async : false,
                url: ctx + '/baseconfig/dmfileplan/getStrategyInfo.do',
                showMask: false,  //是否自动显式全局遮罩
                showError: true, //在出现异常时自动显示异常信息，后台需要返回的数据格式：{code:'ERROR-1001',message:'登录失败'}
                timeout: 30000,   //超过3秒显式全局遮罩，此参数在showMask为true时才有效
                data: {dmStrategyId: VariableView.getDmStrategyId()},
                beforeSend: function(){
                    $.blockUI({message : "获取策略信息中,请稍候..."});
                },
                complete: function(xhr, status){
                    $.unblockUI();
                    if(status == 'timeout'){
                            fish.toast('error', "网络请求超时");
                            return;
                        }
                    if(xhr.responseJSON.success == false){
                        fish.toast('error', xhr.responseJSON.msg);
                        return;
                    }
                    // 把策略信息放在界面内存
                    VariableView.setDmStrategyInfo(xhr.responseJSON);
                    // 源数据表单数据回绑
                    fish.trigger('setSrcFileForm');
                },
                //【注意】如果你在这里配置了自己的error处理函数，fish.ajax就不会自动帮你显示异常信息了！
                error:function(){
                    $.unblockUI();
                }
            });
        }
    });
});
